package protectora.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import protectora.Gato;

public class GatoDAOImpl extends AnimalesDAOImpl implements GatoDAO {

	public List<Gato> getGatos(String idProtectora,
			String idCasaAcogida, String pelo, String raza) {
		List<Gato> resul = new LinkedList<Gato>();
		
		Connection conn = ConnectionManager.getInstance().checkOut();
		
		ResultSet rs = null;
		PreparedStatement st = null;
		
		try {
			String sql = "SELECT DISTINCT a.IdAnimal, a.Nombre, a.Edad, a.FechaEntrada, a.Sociable, a.Enfermo ,g.Pelo,g.Raza";
			sql += " FROM animales a, protectora p, codigopostal cp, casadeacogida ca, gato g";
			sql += " where a.IdProtectora = p.IdProtectora";
			sql += " and a.IdCasaDeAcogida = ca.IdCasaDeAcogida";
			sql += " and a.IdAnimal = g.IdAnimal";
			sql += " and p.IdProtectora = " + idProtectora;
			sql += " and a.IdCasaDeAcogida= " + idCasaAcogida;
			sql += " and a.Adoptado = false";
			if (!raza.equals("") ) {
				sql += " and g.raza = '" + raza + "'";
			}
			if (!pelo.equals("")) {
				sql += " and g.pelo = '" + pelo + "'";
			}
			sql += ";";
			
			st = conn.prepareStatement(sql);
			rs = st.executeQuery();
			while (rs.next()){
				Date fechaentrada = rs.getDate("FechaEntrada");
				long id = rs.getLong("IdAnimal");
				String nombre = rs.getString("Nombre");
				int edad = rs.getInt("Edad");
				boolean sociable = rs.getBoolean("Sociable");
				boolean enfermo = rs.getBoolean("Enfermo");
				String vpelo = rs.getString("Pelo");
				String vraza = rs.getString("Raza");
				Gato g = new Gato(fechaentrada,id,nombre,edad,false,sociable,enfermo,vraza,vpelo);
				resul.add(g);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				st.close();
				conn.close();
			} catch (Exception e) {
				System.out.println("Error al cerrar conexion");
			}
		}
		
		return resul;
	}

	public List<Gato> getGatos(String idProtectora, String pelo, String raza) {
List<Gato> resul = new LinkedList<Gato>();
		
		Connection conn = ConnectionManager.getInstance().checkOut();
		
		ResultSet rs = null;
		PreparedStatement st = null;
		
		try {
			String sql = "SELECT DISTINCT a.IdAnimal, a.Nombre, a.Edad, a.FechaEntrada, a.Sociable, a.Enfermo ,g.Pelo,g.Raza";
			sql += " FROM animales a, protectora p, codigopostal cp, casadeacogida ca, gato g";
			sql += " where a.IdProtectora = p.IdProtectora";
			sql += " and a.IdAnimal = g.IdAnimal";
			sql += " and p.IdProtectora = " + idProtectora;
			sql += " and a.Adoptado = false";
			if (!raza.equals("") ) {
				sql += " and g.raza = '" + raza + "'";
			}
			if (!pelo.equals("") ) {
				sql += " and g.pelo = '" + pelo + "'";
			}
			sql += ";";
			
			st = conn.prepareStatement(sql);
			rs = st.executeQuery();
			while (rs.next()){
				Date fechaentrada = rs.getDate("FechaEntrada");
				long id = rs.getLong("IdAnimal");
				String nombre = rs.getString("Nombre");
				int edad = rs.getInt("Edad");
				boolean sociable = rs.getBoolean("Sociable");
				boolean enfermo = rs.getBoolean("Enfermo");
				String vpelo = rs.getString("Pelo");
				String vraza = rs.getString("Raza");
				Gato g = new Gato(fechaentrada,id,nombre,edad,false,sociable,enfermo,vraza,vpelo);
				resul.add(g);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				st.close();
				conn.close();
			} catch (Exception e) {
				System.out.println("Error al cerrar conexion");
			}
		}
		
		return resul;
	}

	public boolean insertarGato(String idAnimal, String pelo, String raza) {
		boolean resul = false;
		
		Connection conn = ConnectionManager.getInstance().checkOut();
		
		PreparedStatement st = null;
		
		try {
			String sql = "insert into gato (IdAnimal, Raza, Pelo)";
			sql += "Values('"+ idAnimal +"', '"+ raza +"', '"+ pelo +"');";

			st = conn.prepareStatement(sql);
			resul = st.execute();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				st.close();
				conn.close();
				
			} catch (Exception e) {
				System.out.println("Error al cerrar conexion");
			}
		}
		return !resul;
	}

}
